home *** CD-ROM | disk | FTP | other *** search
- package symantec.itools.awt;
-
- import java.awt.BorderLayout;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Container;
- import java.awt.Dimension;
- import java.awt.Event;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.LayoutManager;
- import java.awt.Panel;
- import java.awt.Rectangle;
- import java.awt.Scrollbar;
- import java.util.Vector;
- import symantec.beans.Beans;
-
- public class TreeView extends Panel {
- public static final int CHILD = 0;
- public static final int NEXT = 1;
- public static final int LAST = 2;
- private TreeNode rootNode;
- private TreeNode selectedNode;
- private TreeNode topVisibleNode;
- Scrollbar sbV;
- int sbVPosition;
- int sbVWidth;
- long sbVTimer;
- private int count;
- private int viewCount;
- private Color bgHighlightColor;
- private Color fgHighlightColor;
- private int viewHeight;
- private int viewWidth;
- private int viewWidest;
- int cellSize;
- int clickSize;
- int imageInset;
- int textInset;
- int textBaseLine;
- // $FF: renamed from: fm java.awt.FontMetrics
- private FontMetrics field_0;
- long timeMouseDown;
- int doubleClickResolution;
- protected Image im1;
- // $FF: renamed from: g1 java.awt.Graphics
- protected Graphics field_1;
- private String[] treeStructure;
- // $FF: renamed from: e java.util.Vector
- private Vector field_2;
- // $FF: renamed from: v java.util.Vector
- private Vector field_3;
-
- public TreeView() {
- this.sbVWidth = 16;
- this.sbVTimer = -1L;
- this.bgHighlightColor = Color.blue;
- this.fgHighlightColor = Color.white;
- this.viewHeight = 300;
- this.viewWidth = 300;
- this.cellSize = 16;
- this.clickSize = 8;
- this.imageInset = 3;
- this.textInset = 6;
- this.textBaseLine = 3;
- this.doubleClickResolution = 333;
- super.setLayout(new BorderLayout());
- ((Container)this).add("East", this.sbV = new Scrollbar(1));
- }
-
- public TreeView(TreeNode var1) {
- this();
- this.selectedNode = this.rootNode = var1;
- this.count = 1;
- }
-
- public void setBackground(Color var1) {
- super.setBackground(var1);
- ((Component)this).invalidate();
- }
-
- public Color getBackground() {
- return super.getBackground();
- }
-
- public void setForeground(Color var1) {
- super.setForeground(var1);
- ((Component)this).invalidate();
- }
-
- public Color getForeground() {
- return super.getForeground();
- }
-
- public void setFgHilite(Color var1) {
- this.fgHighlightColor = var1;
- ((Component)this).invalidate();
- }
-
- public Color getFgHilite() {
- return this.fgHighlightColor;
- }
-
- public void setBgHilite(Color var1) {
- this.bgHighlightColor = var1;
- ((Component)this).invalidate();
- }
-
- public Color getBgHilite() {
- return this.bgHighlightColor;
- }
-
- public void insert(TreeNode var1, TreeNode var2, int var3) {
- if (var1 != null && var2 != null) {
- if (this.exists(var2)) {
- switch (var3) {
- case 0:
- this.addChild(var1, var2);
- return;
- case 1:
- this.addSibling(var1, var2);
- return;
- case 2:
- this.addSibling(var1, var2);
- return;
- default:
- }
- }
- }
- }
-
- public TreeNode getRootNode() {
- return this.rootNode;
- }
-
- public int getCount() {
- return this.count;
- }
-
- public int getViewCount() {
- return this.viewCount;
- }
-
- boolean viewable(TreeNode var1) {
- for(int var2 = 0; var2 < this.viewCount; ++var2) {
- if (var1 == this.field_3.elementAt(var2)) {
- return true;
- }
- }
-
- return false;
- }
-
- boolean viewable(String var1) {
- if (var1 == null) {
- return false;
- } else {
- for(int var2 = 0; var2 < this.viewCount; ++var2) {
- TreeNode var3 = (TreeNode)this.field_3.elementAt(var2);
- if (var3.text != null && var1.equals(var3.text)) {
- return true;
- }
- }
-
- return false;
- }
- }
-
- public boolean exists(TreeNode var1) {
- this.recount();
-
- for(int var2 = 0; var2 < this.count; ++var2) {
- if (var1 == this.field_2.elementAt(var2)) {
- return true;
- }
- }
-
- return false;
- }
-
- public boolean exists(String var1) {
- this.recount();
- if (var1 == null) {
- return false;
- } else {
- for(int var2 = 0; var2 < this.count; ++var2) {
- TreeNode var3 = (TreeNode)this.field_2.elementAt(var2);
- if (var3.text != null && var1.equals(var3.text)) {
- return true;
- }
- }
-
- return false;
- }
- }
-
- public void append(TreeNode var1) {
- if (this.rootNode == null) {
- this.rootNode = var1;
- this.selectedNode = this.rootNode;
- this.count = 1;
- } else {
- this.addSibling(var1, this.rootNode);
- }
- }
-
- void addChild(TreeNode var1, TreeNode var2) {
- if (var2.child == null) {
- var2.child = var1;
- var1.parent = var2;
- ++this.count;
- } else {
- this.addSibling(var1, var2.child);
- }
-
- ++var2.numberOfChildren;
- }
-
- void addSibling(TreeNode var1, TreeNode var2) {
- TreeNode var3;
- for(var3 = var2; var3.sibling != null; var3 = var3.sibling) {
- }
-
- var3.sibling = var1;
- var1.parent = var3.parent;
- ++this.count;
- }
-
- public TreeNode remove(String var1) {
- this.recount();
-
- for(int var2 = 0; var2 < this.count; ++var2) {
- TreeNode var3 = (TreeNode)this.field_2.elementAt(var2);
- if (var3.text != null && var1.equals(var3.text)) {
- this.remove(var3);
- return var3;
- }
- }
-
- return null;
- }
-
- public void removeSelected() {
- if (this.selectedNode != null) {
- this.remove(this.selectedNode);
- }
-
- }
-
- public void remove(TreeNode var1) {
- if (this.exists(var1)) {
- if (var1 == this.selectedNode) {
- int var2 = this.field_3.indexOf(this.selectedNode);
- if (var2 == -1) {
- var2 = this.field_2.indexOf(this.selectedNode);
- }
-
- if (var2 > this.viewCount - 1) {
- var2 = this.viewCount - 1;
- }
-
- if (var2 > 0) {
- this.changeSelection((TreeNode)this.field_3.elementAt(var2 - 1));
- } else if (this.viewCount > 0) {
- this.changeSelection((TreeNode)this.field_3.elementAt(1));
- }
- }
-
- if (var1.parent != null) {
- if (var1.parent.child == var1) {
- if (var1.sibling != null) {
- var1.parent.child = var1.sibling;
- } else {
- var1.parent.child = null;
- var1.parent.collapse();
- }
- } else {
- TreeNode var3;
- for(var3 = var1.parent.child; var3.sibling != var1; var3 = var3.sibling) {
- }
-
- if (var1.sibling != null) {
- var3.sibling = var1.sibling;
- } else {
- var3.sibling = null;
- }
- }
- } else if (var1 == this.rootNode) {
- if (var1.sibling == null) {
- this.rootNode = null;
- } else {
- this.rootNode = var1.sibling;
- }
- } else {
- TreeNode var4;
- for(var4 = this.rootNode; var4.sibling != var1; var4 = var4.sibling) {
- }
-
- if (var1.sibling != null) {
- var4.sibling = var1.sibling;
- } else {
- var4.sibling = null;
- }
- }
-
- this.recount();
- }
- }
-
- public void printTree(TreeNode var1) {
- if (var1 != null) {
- System.out.println(var1.text);
- this.printTree(var1.child);
- this.printTree(var1.sibling);
- }
- }
-
- private void recount() {
- this.count = 0;
- this.field_2 = new Vector();
- if (this.rootNode != null) {
- this.rootNode.depth = 0;
- this.traverse(this.rootNode);
- }
-
- }
-
- private void traverse(TreeNode var1) {
- ++this.count;
- this.field_2.addElement(var1);
- if (var1.child != null) {
- var1.child.depth = var1.depth + 1;
- this.traverse(var1.child);
- }
-
- if (var1.sibling != null) {
- var1.sibling.depth = var1.depth;
- this.traverse(var1.sibling);
- }
-
- }
-
- private void resetVector() {
- this.field_3 = new Vector(this.count);
- this.viewWidest = 30;
- if (this.count < 1) {
- this.viewCount = 0;
- } else {
- this.rootNode.depth = 0;
- this.vectorize(this.rootNode);
- this.viewCount = this.field_3.size();
- }
- }
-
- private void vectorize(TreeNode var1) {
- if (var1 != null) {
- this.field_3.addElement(var1);
- if (var1.isExpanded()) {
- var1.child.depth = var1.depth + 1;
- this.vectorize(var1.child);
- }
-
- if (var1.sibling != null) {
- var1.sibling.depth = var1.depth;
- this.vectorize(var1.sibling);
- }
-
- }
- }
-
- private void debugVector() {
- this.field_3.size();
-
- for(int var1 = 0; var1 < this.count; ++var1) {
- TreeNode var2 = (TreeNode)this.field_3.elementAt(var1);
- System.out.println(var2.text);
- }
-
- }
-
- public boolean handleEvent(Event var1) {
- if (var1.target == this.sbV) {
- if (var1.arg == null) {
- return false;
- }
-
- if (this.sbVPosition != (Integer)var1.arg) {
- this.sbVPosition = (Integer)var1.arg;
- this.redraw();
- }
- }
-
- return super.handleEvent(var1);
- }
-
- public boolean mouseDown(Event var1, int var2, int var3) {
- int var4 = var3 / this.cellSize + this.sbVPosition;
- if (var4 > this.viewCount - 1) {
- return false;
- } else {
- TreeNode var5 = this.selectedNode;
- TreeNode var6 = (TreeNode)this.field_3.elementAt(var4);
- int var7 = var6.getDepth();
- this.changeSelection(var6);
- Rectangle var8 = new Rectangle(this.cellSize * var7 + this.cellSize / 4, (var4 - this.sbVPosition) * this.cellSize + this.clickSize / 2, this.clickSize, this.clickSize);
- if (var8.inside(var2, var3)) {
- var6.toggle();
- this.redraw();
- } else {
- if (var6 == var5 && var1.when - this.timeMouseDown < (long)this.doubleClickResolution) {
- var6.toggle();
- this.redraw();
- this.sendActionEvent(var1);
- return false;
- }
-
- this.timeMouseDown = var1.when;
- }
-
- return true;
- }
- }
-
- public boolean keyDown(Event var1, int var2) {
- int var3 = this.field_3.indexOf(this.selectedNode);
- switch (var2) {
- case 10:
- this.sendActionEvent(var1);
- ((Component)this).requestFocus();
- break;
- case 1006:
- if (this.selectedNode.isExpanded()) {
- this.selectedNode.toggle();
- this.redraw();
- break;
- }
- case 1004:
- if (var3 > 0) {
- --var3;
- this.changeSelection((TreeNode)this.field_3.elementAt(var3));
- ((Component)this).requestFocus();
- }
- break;
- case 1007:
- if (this.selectedNode.isExpandable() && !this.selectedNode.isExpanded()) {
- this.selectedNode.toggle();
- this.redraw();
- break;
- } else if (!this.selectedNode.isExpandable()) {
- break;
- }
- case 1005:
- if (var3 < this.viewCount - 1) {
- ++var3;
- this.changeSelection((TreeNode)this.field_3.elementAt(var3));
- ((Component)this).requestFocus();
- }
- }
-
- return false;
- }
-
- private void sendActionEvent(Event var1) {
- int var2 = var1.id;
- Object var3 = var1.arg;
- var1.id = 1001;
- var1.arg = new String(this.selectedNode.getText());
- ((Component)this).postEvent(var1);
- var1.id = var2;
- var1.arg = var3;
- }
-
- public TreeNode getSelectedNode() {
- return this.selectedNode;
- }
-
- public String getSelectedText() {
- return this.selectedNode == null ? null : this.selectedNode.getText();
- }
-
- private void changeSelection(TreeNode var1) {
- if (var1 != this.selectedNode) {
- TreeNode var2 = this.selectedNode;
- this.selectedNode = var1;
- this.drawNodeText(var2, (this.field_3.indexOf(var2) - this.sbVPosition) * this.cellSize, true);
- this.drawNodeText(var1, (this.field_3.indexOf(var1) - this.sbVPosition) * this.cellSize, true);
- int var3 = this.field_3.indexOf(this.selectedNode);
- if (var3 < this.sbVPosition) {
- --this.sbVPosition;
- this.sbV.setValue(this.sbVPosition);
- this.redraw();
- } else if (var3 >= this.sbVPosition + (this.viewHeight - this.cellSize / 2) / this.cellSize) {
- ++this.sbVPosition;
- this.sbV.setValue(this.sbVPosition);
- this.redraw();
- } else {
- ((Component)this).repaint();
- }
- }
- }
-
- public void update(Graphics var1) {
- this.paint(var1);
- }
-
- public void paint(Graphics var1) {
- Dimension var2 = ((Component)this).size();
- if (var2.width == this.viewWidth && var2.height == this.viewHeight) {
- if (Beans.isDesignTime()) {
- this.resetVector();
- ((Container)this).layout();
- this.drawTree();
- }
- } else {
- this.redraw();
- }
-
- var1.drawImage(this.im1, 0, 0, this);
- }
-
- public void redraw() {
- this.resetVector();
- if (this.viewCount > this.viewHeight / this.cellSize) {
- this.sbV.setValues(this.sbVPosition, this.viewHeight / this.cellSize, 0, this.viewCount - 2);
- this.sbV.setPageIncrement(1);
- this.sbVWidth = 16;
- ((Component)this).getParent().paintAll(((Component)this).getParent().getGraphics());
- this.sbV.show();
- ((Container)this).layout();
- } else {
- this.sbV.hide();
- this.sbVWidth = 0;
- this.sbVPosition = 0;
- ((Container)this).layout();
- }
-
- this.drawTree();
- ((Component)this).repaint();
- }
-
- public void drawTree() {
- Dimension var1 = ((Component)this).size();
- if (var1.width != this.viewWidth || var1.height != this.viewHeight || this.field_1 == null) {
- this.im1 = ((Component)this).createImage(var1.width, var1.height);
- if (this.field_1 != null) {
- this.field_1.dispose();
- }
-
- this.field_1 = this.im1.getGraphics();
- this.viewWidth = var1.width;
- this.viewHeight = var1.height;
- }
-
- Font var2 = ((Component)this).getFont();
- if (var2 == null) {
- var2 = new Font("TimesRoman", 0, 13);
- this.field_1.setFont(var2);
- ((Component)this).setFont(var2);
- }
-
- this.field_0 = this.field_1.getFontMetrics();
- this.field_1.setColor(this.getBackground());
- this.field_1.fillRect(0, 0, this.viewWidth, this.viewHeight);
- int var3 = this.sbVPosition + this.viewHeight / this.cellSize;
- if (var3 > this.viewCount) {
- var3 = this.viewCount;
- }
-
- for(int var4 = this.sbVPosition; var4 < var3; ++var4) {
- TreeNode var5 = (TreeNode)this.field_3.elementAt(var4);
- int var6 = this.cellSize * (var5.depth + 1);
- int var7 = (var4 - this.sbVPosition) * this.cellSize;
- this.field_1.setColor(this.getForeground());
- if (var5.sibling != null) {
- int var8 = this.field_3.indexOf(var5.sibling) - var4;
- if (var8 > var3) {
- var8 = var3;
- }
-
- this.drawDotLine(var6 - this.cellSize / 2, var7 + this.cellSize / 2, var6 - this.cellSize / 2, var7 + this.cellSize / 2 + var8 * this.cellSize);
- }
-
- for(int var11 = 0; var11 < var4; ++var11) {
- TreeNode var9 = (TreeNode)this.field_3.elementAt(var11);
- if (var9.sibling == var5 && var11 < this.sbVPosition) {
- this.drawDotLine(var6 - this.cellSize / 2, 0, var6 - this.cellSize / 2, var7 + this.cellSize / 2);
- }
- }
-
- if (var5.isExpanded()) {
- this.drawDotLine(var6 + this.cellSize / 2, var7 + this.cellSize, var6 + this.cellSize / 2, var7 + this.cellSize + this.cellSize / 2);
- }
-
- this.field_1.setColor(this.getForeground());
- this.drawDotLine(var6 - this.cellSize / 2, var7 + this.cellSize / 2, var6 + this.cellSize / 2, var7 + this.cellSize / 2);
- if (var5.isExpandable()) {
- this.field_1.setColor(this.getBackground());
- this.field_1.fillRect(this.cellSize * var5.depth + this.cellSize / 4, var7 + this.clickSize / 2, this.clickSize, this.clickSize);
- this.field_1.setColor(this.getForeground());
- this.field_1.drawRect(this.cellSize * var5.depth + this.cellSize / 4, var7 + this.clickSize / 2, this.clickSize, this.clickSize);
- this.field_1.drawLine(this.cellSize * var5.depth + this.cellSize / 4 + 2, var7 + this.cellSize / 2, this.cellSize * var5.depth + this.cellSize / 4 + this.clickSize - 2, var7 + this.cellSize / 2);
- if (!var5.isExpanded()) {
- this.field_1.drawLine(this.cellSize * var5.depth + this.cellSize / 2, var7 + this.clickSize / 2 + 2, this.cellSize * var5.depth + this.cellSize / 2, var7 + this.clickSize / 2 + this.clickSize - 2);
- }
- }
-
- Image var12 = var5.getImage();
- if (var12 != null) {
- this.field_1.drawImage(var12, var6 + this.imageInset, var7, this);
- }
-
- if (var5.text != null) {
- this.drawNodeText(var5, var7, var5 == this.selectedNode);
- }
- }
-
- this.field_1.setColor(this.getForeground());
- this.field_1.drawRect(0, 0, this.viewWidth - this.sbVWidth - 1, this.viewHeight - 1);
- }
-
- private void drawNodeText(TreeNode var1, int var2, boolean var3) {
- int var6 = var1.depth;
- int var7 = (var6 + 1) * this.cellSize + this.cellSize + this.textInset;
- Color var4;
- Color var5;
- if (var1 == this.selectedNode) {
- var4 = this.fgHighlightColor;
- var5 = this.bgHighlightColor;
- } else {
- var4 = this.getForeground();
- var5 = this.getBackground();
- }
-
- if (var3) {
- this.field_1.setColor(var5);
- this.field_1.fillRect(var7 - 1, var2 + 1, this.field_0.stringWidth(var1.text) + 4, this.cellSize - 1);
- }
-
- this.field_1.setColor(var4);
- this.field_1.drawString(var1.text, var7, var2 + this.cellSize - this.textBaseLine);
- }
-
- private void drawDotLine(int var1, int var2, int var3, int var4) {
- if (var2 == var4) {
- for(int var6 = var1; var6 < var3; var6 += 2) {
- this.field_1.drawLine(var6, var2, var6, var4);
- }
-
- } else {
- for(int var5 = var2; var5 < var4; var5 += 2) {
- this.field_1.drawLine(var1, var5, var3, var5);
- }
-
- }
- }
-
- public void setTreeStructure(String[] var1) {
- this.rootNode = this.selectedNode = this.topVisibleNode = null;
- this.treeStructure = var1;
-
- try {
- this.parseTreeStructure();
- } catch (InvalidTreeNodeException var3) {
- System.out.println(var3);
- }
- }
-
- public String[] getTreeStructure() {
- return this.treeStructure;
- }
-
- private void parseTreeStructure() throws InvalidTreeNodeException {
- Object var1 = null;
- Object var2 = null;
- String[] var10 = this.treeStructure;
- String var11 = var10[0];
- if (this.findLastPreSpace(var11) > -1) {
- throw new InvalidTreeNodeException();
- } else {
- TreeNode var3 = new TreeNode(var11.trim());
- var3.setDepth(0);
- this.append(var3);
-
- for(int var4 = 1; var4 < var10.length; ++var4) {
- var11 = var10[var4];
- int var6 = this.findLastPreSpace(var11);
- if (var6 == -1) {
- throw new InvalidTreeNodeException();
- }
-
- TreeNode var5 = this.rootNode;
-
- for(int var7 = 0; var7 < var6; ++var7) {
- int var9 = var5.numberOfChildren;
- TreeNode var8 = null;
- if (var9 > 0) {
- for(var8 = var5.child; var8.sibling != null; var8 = var8.sibling) {
- }
- }
-
- if (var8 == null) {
- break;
- }
-
- var5 = var8;
- }
-
- int var14 = var6 - var5.getDepth();
- if (var14 > 1) {
- throw new InvalidTreeNodeException();
- }
-
- var3 = new TreeNode(var11.trim());
- var3.setDepth(var6);
- if (var14 == 1) {
- this.insert(var3, var5, 0);
- } else {
- this.insert(var3, var5, 1);
- }
- }
-
- }
- }
-
- private int findLastPreSpace(String var1) {
- int var2 = var1.length();
- if (var1.charAt(0) != ' ') {
- return -1;
- } else {
- for(int var3 = 1; var3 < var2; ++var3) {
- if (var1.charAt(var3) != ' ') {
- return var3;
- }
- }
-
- return -1;
- }
- }
-
- public synchronized Dimension preferredSize() {
- return new Dimension(175, 125);
- }
-
- public synchronized Dimension minimumSize() {
- return new Dimension(50, 50);
- }
-
- public void setLayout(LayoutManager var1) {
- }
- }
-